package com.test.restassured;

import io.restassured.response.Response;

import java.util.HashMap;

import static io.restassured.RestAssured.given;

public class GpathDemo {
    public static void main(String[] args) {
        Response response = given()
                .when().get("http://mall.lemonban.com:8107/search/searchProdPage?prodName=真皮圆筒包")
                .then().log().all().extract().response();

        int prodId = response.jsonPath().get("records[0].prodId");
        System.out.println(prodId);
        Object result0 = response.jsonPath().get("records[-1].prodId");
        System.out.println(result0);
        Object result = response.jsonPath().get("records.prodId");
        System.out.println(result);
        // 条件查找
        Object result1 = response.jsonPath().get("records.findAll{it.prodId>1000}.prodId");
        System.out.println(result1);
        Object result2 = response.jsonPath().get("records[0].prodName");
        System.out.println(result2);

        // 发送登录请求获取token信息
        Response login_res = given().
                header("Content-Type", "application/json; charset=UTF-8").
                body("{\"principal\":\"lemon_py\",\"credentials\":\"12345678\",\"appType\":3,\"loginType\":0}").
                when().
                post("http://mall.lemonban.com:8107/login").
                then().
                log().all().extract().response();

        // 从登录响应中提取token_type和access_token字段
        Object token_type = login_res.jsonPath().get("token_type");
        Object access_token = login_res.jsonPath().get("access_token");
        String token = "" + token_type + access_token;

        // 使用token发送请求获取购物车信息
        HashMap<String, Object> headers = new HashMap<>();
        headers.put("Content-Type", "application/json; charset=UTF-8");
        headers.put("Authorization", token);
        response = given().
                headers(headers).
                body("[]").
                when().
                post("http://mall.lemonban.com:8107/p/shopCart/info").then().log().all().extract().response();

        // 提取购物车中的商品信息并打印结果
        result = response.jsonPath().get("shopCartItemDiscounts[0].shopCartItems[0]");
        System.out.println("result: " + result);
    }
}

/*
在 RestAssured 中，header() 方法是链式调用的一部分，每次调用 header() 都会添加一个请求头。
多个请求头可以通过多次调用 header() 来设置，
但不能通过单个 header() 调用合并写入多个 header，除非使用 Map 或其他方式批量添加。

Object result1 = response.jsonPath().get("records.findAll{it.prodId>1000}.prodId");
表达式中的 it 是 Groovy 语言中的一个默认变量名，用于表示闭包（Closure）中的隐式参数。
在 JSONPath 表达式中使用了 Groovy 的语法来支持条件过滤。
Groovy 的其他集合操作，如 collect, find, sort 等。
 */